#ifndef FERMAT_LIBHTTP_HTTP_METHOD_H_
#define FERMAT_LIBHTTP_HTTP_METHOD_H_

#include <fermat/ext/http_parser/http_parser.h>
#include <string>

namespace fermat {
namespace libhttp {

class HttpMethod {
    private:
        typedef ::http_method Value;

    public:

        static const HttpMethod of ( const ::http_parser& parser );

        static const HttpMethod del ();

        static const HttpMethod get ();

        static const HttpMethod head ();

        static const HttpMethod post ();

        static const HttpMethod put  ();


        static const HttpMethod patch ();

        static const HttpMethod connect ();

        static const HttpMethod options ();

        static const HttpMethod trace ();


        static const HttpMethod copy ();
        static const HttpMethod lock ();
        static const HttpMethod mkcol ();
        static const HttpMethod move ();
        static const HttpMethod propfind ();
        static const HttpMethod proppatch ();
        static const HttpMethod unlock ();

        static const HttpMethod report ();
        static const HttpMethod mkactivity ();
        static const HttpMethod checkout ();
        static const HttpMethod merge ();

        static const HttpMethod msearch ();
        static const HttpMethod notify ();
        static const HttpMethod subscribe ();
        static const HttpMethod unsubscribe ();

		std::string toString() const;


    private:
        Value _value;

    private:
        Method ( Value value );

    public:
        bool operator== ( const HttpMethod& rhs ) const;
        bool operator!= ( const HttpMethod& rhs ) const;

        operator Value () const;
    };

}
}
#endif
